package com.sxpi.user.controller.user;

import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.stp.StpUtil;
import com.sxpi.user.controller.BaseController;
import com.sxpi.user.dto.LoginFaceDto;
import com.sxpi.user.dto.LoginTeDto;
import com.sxpi.user.dto.UserDto;
import com.sxpi.user.service.user.IUserService;
import com.sxpi.common.result.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author: 董伟豪
 * @Date: 2022/10/7 20:11
 */
@RestController
@Slf4j
public class UserController extends BaseController {

    @Autowired
    private IUserService userService;

    /**
     * 更新手机号码更新信息
     * @param loginTeDto
     * @return
     */
    @PostMapping("/updateUserTel")
    @SaCheckLogin
    public R updateUserTel(@RequestBody LoginTeDto loginTeDto){
        // 根据token来获取登录的用户iD
        Object loginId = StpUtil.getLoginId();
        Long userId = Long.parseLong(String.valueOf(loginId));
        loginTeDto.setUserId(userId);
        return userService.updateUserTel(loginTeDto);
    }

    /**
     * 人脸识别建档
     * @param loginFaceDto
     * @return
     */
    @PostMapping("/face/verify")
    @SaCheckLogin
    public R createUserFaceModel(@RequestBody LoginFaceDto loginFaceDto){
        // 根据token来获取登录的用户iD
        Object loginId = StpUtil.getLoginId();
        Long userId = Long.parseLong(String.valueOf(loginId));
        loginFaceDto.setUserId(userId);
        return userService.verifyUserFaceModel(loginFaceDto);
    }

    /**
     * 人脸识别认证，判断是否是同一个人
     * @param loginFaceDto
     * @return
     */
    @PostMapping("/face/create")
    @SaCheckLogin
    public R verifyUserFaceModel(@RequestBody LoginFaceDto loginFaceDto){
        // 根据token来获取登录的用户iD
        Object loginId = StpUtil.getLoginId();
        Long userId = Long.parseLong(String.valueOf(loginId));
        loginFaceDto.setUserId(userId);
        return userService.createUserFaceModel(loginFaceDto);
    }

    /**
     * 修改用户信息
     * @return
     * @paramp loginVo
     */
    @PostMapping("/info/update")
    @SaCheckLogin
    public R updateUserInfo(@RequestBody @Validated UserDto userDto){
        // 根据token来获取登录的用户iD
        Object loginId = StpUtil.getLoginId();
        // 使用服务端的用户id
        long userId = Long.parseLong(String.valueOf(loginId));
        userDto.setId(userId);
        // 远程调用。更新用户信息
        return userService.updateUserInfo(userDto);
    }

    /**
     * 获取用户信息
     * @return
     * @paramp loginVo
     */
    @PostMapping("/get/{userId}")
    public R getUserInfo(@PathVariable("userId") Long userId){
        return userService.getUserInfo(userId);
    }
}
